package pl.edu.pk.psb.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pl.edu.pk.psb.bc.bo.UzytkownikBo;
import pl.edu.pk.psb.bc.dto.UzytkownikDto;
import pl.edu.pk.psb.command.LogowanieCommand;

@Controller
public class LogowanieController {
	private static final String COMMAND = "command";
	private static final String ZALOGUJ_URL = "/zaloguj";
	private static final String WYLOGUJ_URL = "/wyloguj";
	private static final String LOGOWANIE_URL = "/logowanie";
	private static final String LOGOWANIE_JSP = "logowanie";
	private static final String LOGOWANIE_POWODZENIE = "logowanie.powodzenie";
	private static final String LOGOWANIE_NIEPOWODZENIE = "logowanie.niepowodzenie";
	private static final String LOGOWANIE_WYLOGOWANO = "logowanie.wylogowano";
	private static final String UZYTKOWNIK = "uzytkownik";
	private static final String INFORMACJA = "wiadomosc";

	@Autowired
	UzytkownikBo uzytkownikBo;

	@ModelAttribute(COMMAND)
	public LogowanieCommand stworzLogowanieCommand() {
		return new LogowanieCommand();
	}

	@RequestMapping(LOGOWANIE_URL)
	public ModelAndView przekieruNaStroneLogowanie() {
		return new ModelAndView(LOGOWANIE_JSP);
	}

	@RequestMapping(value = ZALOGUJ_URL)
	public ModelAndView zaloguj(@ModelAttribute(COMMAND) LogowanieCommand command, HttpSession session, HttpServletRequest request) {
		UzytkownikDto uzytkownik = uzytkownikBo.zaloguj(command.getLogin(), command.getHaslo());
		if (uzytkownik != null) {
			// umieszczenie uzytkownika w sesji zeby zaznaczyc ze jest
			// zalogowany i moc sprawdzac jego atrybuty
			session.setAttribute(UZYTKOWNIK, uzytkownik);
			session.setAttribute(INFORMACJA, LOGOWANIE_POWODZENIE);
		} else {
			// brak uzytkownika w bazie
			session.setAttribute(INFORMACJA, LOGOWANIE_NIEPOWODZENIE);
		}

		return new ModelAndView("redirect:/glowna");
	}

	@RequestMapping(value = WYLOGUJ_URL)
	public ModelAndView wyloguj(HttpSession session) {
		session.setAttribute(UZYTKOWNIK, null);
		session.setAttribute(INFORMACJA, LOGOWANIE_WYLOGOWANO);
		return new ModelAndView("redirect:/glowna");
	}
}
